package battleco

import (
	"wails/schema/config/commonco"
	"wails/schema/enums/battleenum"
)

type SBehaviorResponse struct {
	// 触发几率
	Chance float64
	// 触发需要的费用
	Cost *S消耗
}

type SDodgeResponse struct {
	SBehaviorResponse

	// 触发的效果
	Effect string
	// 条件-不包括效果数组
	// 注意: 带伤害响应的单位, 如果伤害响应产生的伤害效果, 作用在自己身上,
	// 需要添加到ExcludeEffectArray中排除, 否则会导致死循环
	ExcludeEffectArray map[string]string
	// 位置
	// 该单位对死亡作出反应时所处的位置
	Location battleenum.DamageLocation
	// 需要效果数组
	// 指定的效果才会触发
	RequireEffectArray map[string]string
	// 条件-目标过滤器
	// 被应用伤害响应的单位
	TargetFilters *S目标过滤器
}

type SUnitDodgeResponse struct {
	Response *SDodgeResponse
	//
	Unit int
	//
	Behavior int
}

type SDeathResponse struct {
	SBehaviorResponse
	// 位置
	// 该单位对死亡作出反应时所处的位置
	Location battleenum.DamageLocation
	// 触发的效果
	Effect string
	// 死亡类型
	Type map[battleenum.DeathType]bool
	// 条件-目标过滤器
	TargetFilters *S目标过滤器
}

type SUnitDeathResponse struct {
	Response *SDeathResponse
	//
	Unit int
	//
	Behavior int
}

type SDamageResponse struct {
	SBehaviorResponse
	// 触发响应后的修改
	// 修正-伤害限制
	DamageLimit *commonco.ValueLimit

	// 修正-伤害加成
	DamageBonus *commonco.BonusFactor

	// 修正-伤害修改限制
	ModifyLimit float64

	// 修正-修改最小伤害
	// 如果修正的伤害小于最小伤害, 不作限制
	ModifyMinDamage bool

	// 修正-耗尽的
	// 当伤害响应所调整的伤害量达到指定的修改限制时，应用给单位的效果
	Exhausted string

	// 修正-被控制的
	// 当该单位对伤害作出反应时应用于该单位的效果
	Handled string

	// 修正-效果源
	TargetInfo battleenum.ResponseTargetInfo

	// 条件-不包括效果数组
	// 注意: 带伤害响应的单位, 如果伤害响应产生的伤害效果, 作用在自己身上,
	// 需要添加到ExcludeEffectArray中排除, 否则会导致死循环
	ExcludeEffectArray map[string]string
	// 条件-暴击
	// 当前设为true的时候才检查
	Critical battleenum.BoolIgnore
	// 条件-致命
	// 基于伤害对该单位是否致命而对此伤害作出的反应
	// 当前设为true的时候才检查
	Fatal battleenum.BoolIgnore
	// 条件-todo: 忽略
	// 作出反应前该单位忽略的伤害值
	Ignore []float64
	// 条件-种类
	// 该单位应对其作出反应的伤害类型
	Kind map[battleenum.S伤害类型]bool
	// 条件-位置
	// 该单位(获得buff的单位)对伤害作出反应时所处的位置
	// 该单位受到伤害时, Location等于Defender时, 条件成立
	// 该单位对目标产生伤害时, Location等于Attacker时, 条件成立
	Location battleenum.DamageLocation
	// 条件-伤害值
	DamageValue battleenum.DamageValue
	// 条件-伤害限制
	// 产生的伤害在范围内才会触发
	Limit *commonco.ValueLimit
	// 条件-todo: 优先级
	Priority int
	// 条件-需要效果数组
	// 指定的效果才会触发
	RequireEffectArray map[string]string
	// 条件-目标过滤器
	// 被应用伤害响应的单位
	TargetFilters *S目标过滤器

	// 条件-验证器
	ValidatorArray map[string]string
}

type SUnitDamageResponse struct {
	//
	Unit int
	//
	Behavior int
	//
	UseExhausted bool
	//
	UseHandled bool
}
